<?php

namespace Sharks\Core\Cfg;

use Noodlehaus\Config;
use Noodlehaus\Exception;

/**
 * 应用配置
 * @package Sharks\Core
 */
class AppConfig {

    /** 开发运行模式, 动态加载数据 */
    const MODE_DEV = 'dev';
    /** 服务器运行模式, 加载已经生成的文件高效运行 */
    const MODE_SERVER = 'server';
    /** 默认模式 */
    const DEFAULT_MODE = self::MODE_SERVER;

    /**
     * 配置对象
     */
    private static $cfg;

    /**
     * 初始化
     * @param  [type] $file [description]
     * @return [type]       [description]
     */
    public static function add($file) {
        if (is_null(self::$cfg)) {
            self::$cfg = new Configuration($file);
        }
        else {
            self::addCfg(new Configuration($file));            
        }
    }

    /**
     * 按配置项获取值
     * @param  mxied $name    配置项名称
     * @param  mxied $default 当配置项为空时，返回的默认值
     * @return mixed [description]
     */
    public static function get($name, $default = null) {
        if (is_null(self::$cfg)) {
            return $default;
        }
        return self::$cfg->get($name, $default);
    }

    /**
     * 加入配置文件
     * @param Configuration $cfg [description]
     */
    public static function addCfg(Configuration $cfg) {
        if (is_null(self::$cfg)) {
            self::$cfg = $cfg;
        }
        else {
            self::$cfg->merge($cfg);
        }
    }

    /**
     * 所有配置项数据
     * @return mixed
     */
    public static function configs() {
        if (is_null(self::$cfg)) {
            return array();
        }
        return self::$cfg->all();
    }
}